import Axios from "axios";
// import Storage from "@/store";
import { ElMessage, ElMessageBox } from "element-plus";

Axios.defaults.timeout = 5000;

// /**
//  * 接口地址配置
//  * @param type {number} - 选哪个请求头
//  * @returns {string}
//  */

export function baseURL(type: string): any {
  let baseUrl = "";
  baseUrl = import.meta.env.MODE === "development" ? "/api" : '/';
  return baseUrl;
}

Axios.defaults.baseURL = baseURL('0');

// 对请求参数做处理
Axios.interceptors.request.use(
  async (config: any) => {
    config.headers = {
      "Content-Type": "application/json;charset=UTF-8",
      Authorization: Axios.defaults.authorization || null,
    };
    return config;
  },
  (error) => {
    console.log('error', error)
    // return Promise.reject(error);
  }
);
// 响应拦截器即异常处理
Axios.interceptors.response.use(
  (response: any) => {
    // console.log('响应拦截器即异常处理', response.config.url, response)
    return response.data;
  },
  (err) => {
    // if (err && err.response) {
    //   const errMes = err.response.data.message;
    //   console.log('errMes', errMes)
    //   // switch (err.response.status) {
    //   //   case 400:
    //   //     ElMessage.error(errMes || "错误请求");
    //   //     break;
    //   //   case 401:
    //   //     ElMessage.error(errMes || "用户未登录");
    //   //     break;
    //   //   case 403:
    //   //     ElMessage.error(errMes || "拒绝访问");
    //   //     break;
    //   //   case 404:
    //   //     ElMessage.error(errMes || "请求错误,未找到该资源");
    //   //     break;
    //   //   case 405:
    //   //     ElMessage.error(errMes || "请求方法未允许");
    //   //     break;
    //   //   case 406:
    //   //     ElMessage.error(errMes || "请求方法不被接受");
    //   //     break;
    //   //   case 408:
    //   //     ElMessage.error(errMes || "请求超时");
    //   //     break;
    //   //   case 500:
    //   //     ElMessage.error(errMes || "服务器端出错");
    //   //     break;
    //   //   case 501:
    //   //     ElMessage.error(errMes || "网络未实现");
    //   //     break;
    //   //   case 502:
    //   //     ElMessage.error(errMes || "网络错误");
    //   //     break;
    //   //   case 503:
    //   //     ElMessage.error(errMes || "服务升级中");
    //   //     break;
    //   //   case 504:
    //   //     ElMessage.error(errMes || "网络超时");
    //   //     break;
    //   //   case 505:
    //   //     ElMessage.error(errMes || "http版本不支持该请求");
    //   //     break;
    //   //   default:
    //   //     ElMessage.error(errMes || `连接错误${err.response.status}`);
    //   //     break;
    //   // }
    //   // return Promise.reject(err);
    //   console.log(errMes)
    // } else {
    //   // ElMessage.warning("网络开小差了，请重试");
    // }
    // return Promise.reject(err);
    console.log(err)
  }
);

/**
 * 封装get方法
 * @param {string} url - 接口地址
 * @param {object} params = {} - 接口参数
 * @returns {*} Promise
 */

export function get(url: string, params = {}) {
  return new Promise((resolve, reject) => {
    Axios.get(url, {
      params: params,
    })
      .then((response: any) => {
        resolve(response);
      })
      .catch((err) => {
        console.log(err)
        // reject(err);
      });
  });
}

/**
 * 封装delete方法
 * @param {string} url - 接口地址
 * @param {object} params = {} - 接口参数
 * @returns {*} Promise
 */

export function del(url: string, params = {}) {
  return new Promise((resolve, reject) => {
    Axios.delete(url, {
      params: params,
    })
      .then((response: any) => {
        resolve(response);
      })
      .catch((err) => {
        // reject(err);
        console.log(err)
      });
  });
}
/**
 * 封装delete方法
 * @param {string} url - 接口地址
 * @param  data - 接口参数
 * @returns {*} Promise
 */

export function delBody(url: string, data = {}) {
  return new Promise((resolve, reject) => {
    Axios.delete(url, {
      data: data,
    })
      .then((response: any) => {
        resolve(response);
      })
      .catch((err) => {
        console.log(err)
        // reject(err);
      });
  });
}

/**
 * 封装post请求
 * @param {string} url - 接口地址
 * @param {object} data = {} - 接口参数
 * @returns {*} Promise
 */

export function post(url: string, data = {}) {
  return new Promise((resolve, reject) => {
    Axios.post(url, data).then(
      (response: any) => {
        resolve(response);
      },
      (err) => {
        // reject(err);
        console.log(err)
      }
    );
  });
}

/**
 * 封装postQuery请求
 * @param {string} url - 接口地址
 * @param {object} params = {} - 接口参数
 * @returns {*} Promise
 */

export function postQuery(url: string, params = {}) {
  return new Promise((resolve, reject) => {
    Axios.post(url, {}, {
      params: params
    })
      .then((response: any) => {
        resolve(response);
      }, err => {
        // reject(err)
        console.log(err)
      })
  })
}
/**
 * 封装patch请求
 * @param {string} url - 接口地址
 * @param {object} data = {} - 接口参数
 * @returns {*} Promise
 */

export function patch(url: string, data = {}) {
  return new Promise((resolve, reject) => {
    Axios.patch(url, data).then(
      (response: any) => {
        resolve(response);
      },
      (err) => {
        // reject(err);
        console.log(err)
      }
    );
  });
}

/**
 * 封装put请求
 * @param {string} url - 接口地址
 * @param {object} data = {} - 接口参数
 * @returns {*} Promise
 */

export function put(url: string, data = {}) {
  return new Promise((resolve, reject) => {
    Axios.put(url, data).then(
      (response: any) => {
        resolve(response);
      },
      (err) => {
        // reject(err);
        console.log(err)
      }
    );
  });
}

/**
 * 封装多文件上传请求
 * @param {string} url - 接口地址
 * @param {object} data = {} - 接口参数
 * @returns {*} Promise
 */
export function uploadAvatar(url: string, data = {}) {
  return new Promise((resolve, reject) => {
    // {
    // Headers: {
    // 'Content-type': 'multipart/form-data'
    // }
    // }
    Axios.post(url, data,).then(
      (response: any) => {
        resolve(response);
      },
      (err) => {
        // reject(err);
        console.log(err)
      }
    );
  });
}